home *** CD-ROM | disk | FTP | other *** search
- /*
- * Aes window library interface
- *
- * wind_create Create a window
- * wind_open Open a window in its initial size
- * wind_close Close a window (not de-allocated)
- * wind_delete De-Allocate a window
- * wind_get Returns info about a window
- * wind_set Sets various attributes of a window
- * wind_find Find window under mouse.
- * wind_update Advise AES about exclusive use of a window
- * wind_calc Calc work area/border area of a window
- * wind_new close and delete all windows
- *
- * ++jrb bammi@cadence.com
- * modified: mj -- ntomczak@vm.ucs.ualberta.ca
- */
- #include "common.h"
-
- #ifdef __DEF_ALL__
-
- #define L_wind_cre
- #define L_wind_ope
- #define L_wind_clo
- #define L_wind_del
- #define L_wind_get
- #define L_wind_set
- #define L_wind_fin
- #define L_wind_upd
- #define L_wind_cal
- #define L_wind_new
-
- #endif /* __DEF_ALL__ */
-
-
- #ifdef L_wind_cre
-
- /* wind_create
- * Parts The window parts to be present
- * NAME 0x0001 Title Bar
- * CLOSE 0x0002 Close Box
- * FULL 0x0004 Full Box
- * MOVE 0x0008 Move Bar
- * INFO 0x0010 Info line
- * SIZE 0x0020 Size Box
- * UPARROW 0x0040 Up arrow on vert slider
- * DNARROW 0x0080 Dn arrow on vert slider
- * VSLIDE 0x0100 Vert slider
- * LFARROW 0x0200 Left arrow on horz slider
- * RTARROW 0x0400 Right arrow on horz slider
- * HSLIDE 0x0800 Horz slider
- *
- * Wx,Wy,Ww,Wh Max window size
- *
- * retrun WindowHandle Identifier of the created window <0 == error
- */
- int wind_create(int Parts, int Wx, int Wy, int Ww, int Wh)
- {
- _int_in[0] = Parts;
- _int_in[1] = Wx;
- _int_in[2] = Wy;
- _int_in[3] = Ww;
- _int_in[4] = Wh;
-
- return __aes__(AES_CONTROL_ENCODE(100, 5, 1, 0));
- }
- #endif /* L_wind_cre */
-
-
- #ifdef L_wind_ope
-
- /* wind_open
- * WindowHandle The window's identifying handle
- * Wx,Wy,Ww,Wh Position and size to open at
- *
- * returns 0 on error >0 no error
- */
- int wind_open(int WindowHandle, int Wx, int Wy, int Ww, int Wh)
- {
- _int_in[0] = WindowHandle;
- _int_in[1] = Wx;
- _int_in[2] = Wy;
- _int_in[3] = Ww;
- _int_in[4] = Wh;
-
- return __aes__(AES_CONTROL_ENCODE(101, 5, 1, 0));
- }
- #endif /* L_wind_ope */
-
-
- #ifdef L_wind_clo
-
- int wind_close(int WindowHandle)
- {
- _int_in[0] = WindowHandle;
- return __aes__(AES_CONTROL_ENCODE(102, 1, 1, 0));
- }
- #endif /* L_wind_clo */
-
-
- #ifdef L_wind_del
-
- int wind_delete(int WindowHandle)
- {
- _int_in[0] = WindowHandle;
- return __aes__(AES_CONTROL_ENCODE(103, 1, 1, 0));
- }
- #endif /* L_wind_del */
-
- #ifdef L_wind_get
-
- /*
- * wind_get
- * WindowHandle Window identifier
- * What WF_WORKXYWH(4) coordinates of inside work area
- * WF_CURRXYWH(5) curr coordinates of entire window
- * WF_PREVXYWH(6) coordinates of previous window
- * WF_FULLXYWH(7) coordinate of window at its max size
- * WF_HSLIDE(8) position of horz slider in W1
- * WF_VSLIDE(9) position of vert slider in W1
- * WF_TOP(10) window handle of window on top in W1
- * WF_FIRSTXYWH(11) coord. of first rect in window list
- * WF_NEXTXYWH(12) coord. of next window in rect in list
- * 13,14 reserved
- * WF_HSLSIZE(15) size of horz slider in W1
- * WF_VSLSIZE(16) size of vert slider in W1
- *
- * retrns 0 on error >0 no error
- */
- int wind_get(int WindowHandle, int What,
- int *W1, int *W2, int *W3, int *W4)
- {
- int retval;
-
- _int_in[0] = WindowHandle;
- _int_in[1] = What;
-
- retval = __aes__(AES_CONTROL_ENCODE(104, 2, 5, 0));
-
- *W1 = _int_out[1];
- *W2 = _int_out[2];
- *W3 = _int_out[3];
- *W4 = _int_out[4];
-
- return retval;
- }
- #endif /* L_wind_get */
-
- #ifdef L_wind_set
-
- /*
- * wind_set (See wind_set_address below too)
- * What Same as above except
- * WF_KIND(1) Window components in W1
- * WF_NAME(2) Window Title in W1 and W2
- * WF_INFO(3) Window info line in W1 and W2
- * WF_NEWDESK(14) Address of new desktop tree in W1 W2
- * index of object in W3
- *
- * return 0 on error >0 no error
- */
- int wind_set(int WindowHandle, int What, int W1, int W2, int W3, int W4)
- {
- _int_in[0] = WindowHandle;
- _int_in[1] = What;
- #ifdef __MSHORT__
- _int_in[2] = W1;
- _int_in[3] = W2;
- _int_in[4] = W3;
- _int_in[5] = W4;
- #else
- /* for 32 bit ints stuff the address into _int_in[2] and [3] */
- switch(What)
- {
- /* NAME INFO NEWDESK */
- case 2: case 3: case 14:
- { unsigned short *s = (unsigned short *)&W1;
- _int_in[2] = s[0];
- _int_in[3] = s[1];
- if(What == 14 /* NEWDESK */)
- _int_in[4] = W2;
- }
- break;
- default:
- _int_in[2] = W1;
- _int_in[3] = W2;
- _int_in[4] = W3;
- _int_in[5] = W4;
- }
- #endif /* __MSHORT__ */
-
- return __aes__(AES_CONTROL_ENCODE(105, 6, 1, 0));
- }
- #endif /* L_wind_set */
-
- #ifdef L_wind_fin
-
- /* Find window under mouse
- * returns handle of window undex X,Y
- */
- int wind_find(int X, int Y)
- {
- _int_in[0] = X;
- _int_in[1] = Y;
- return __aes__(AES_CONTROL_ENCODE(106, 2, 1, 0));
- }
- #endif /* L_wind_fin */
-
- #ifdef L_wind_upd
-
- /* wind_update
- * Code END_UPDATE(0) end of update
- * BEG_UPDATE(1) begin update of window
- * END_MCTRL(2) end control of mouse functions
- * BEG_MCTRL(3) begin control of mouse functions
- *
- * returns 0 on error >0 no error
- */
- int wind_update(int Code)
- {
- _int_in[0] = Code;
- return __aes__(AES_CONTROL_ENCODE(107, 1, 1, 0));
- }
- #endif /* L_wind_upd */
-
- #ifdef L_wind_cal
-
- /*
- * wind_calc
- * Type = 0 return border area
- * = 1 return inner work area
- * Parts As above
- * InX,InY, InW, InH input value, when Type = 0 coord. of inner area
- * when Type = 1 coord. of border area
- * OutX,OutY,OutW, OutH calculated coordinates
- *
- * return 0 on error >0 o error
- */
- int wind_calc(int Type, int Parts,
- int InX, int InY, int InW, int InH,
- int *OutX, int *OutY, int *OutW, int *OutH)
- {
- int retval;
-
- _int_in[0] = Type;
- _int_in[1] = Parts;
- _int_in[2] = InX;
- _int_in[3] = InY;
- _int_in[4] = InW;
- _int_in[5] = InH;
-
- retval = __aes__(AES_CONTROL_ENCODE(108, 6, 5, 0));
-
- *OutX = _int_out[1];
- *OutY = _int_out[2];
- *OutW = _int_out[3];
- *OutH = _int_out[4];
-
- return retval;
- }
- #endif /* L_wind_cal */
-
- #ifdef L_wind_new
-
- /*
- * wind_new
- * Close and delete all windows, reset wind_update(), flush all buffers
- * restore mouse ownership to system
- *
- */
- void wind_new(void)
- {
- (void) __aes__(AES_CONTROL_ENCODE(109, 0, 0, 0));
- }
- #endif /* L_wind_new */
-
- /* - eof - */
-